package serveur;


public class Navire {
	private int xA,yA,xB,yB;
	//A correspond au premier point
	//B au point extreme du navire
	private int longueur;
	private boolean[] estTouche;

	Navire(int xA, int yA, int xB, int yB, int longueur){
		this.xA=xA;
		this.yA=yA;
		this.xB=xB;
		this.yB=yB;
		this.longueur = longueur;
		estTouche = new boolean[longueur];
	}


	public int getLongueur() {
		return longueur;
	}


	public void setLongueur(int longueur) {
		this.longueur = longueur;
	}


	/**
	 * @return the xA
	 */
	public int getxA() {
		return xA;
	}


	/**
	 * @param xA the xA to set
	 */
	public void setxA(int xA) {
		this.xA = xA;
	}


	/**
	 * @return the yA
	 */
	public int getyA() {
		return yA;
	}


	/**
	 * @param yA the yA to set
	 */
	public void setyA(int yA) {
		this.yA = yA;
	}


	/**
	 * @return the xB
	 */
	public int getxB() {
		return xB;
	}


	/**
	 * @param xB the xB to set
	 */
	public void setxB(int xB) {
		this.xB = xB;
	}


	/**
	 * @return the yB
	 */
	public int getyB() {
		return yB;
	}


	/**
	 * @param yB the yB to set
	 */
	public void setyB(int yB) {
		this.yB = yB;
	}


	public boolean[] getEstTouche() {
		return estTouche;
	}


	public void setEstTouche(boolean[] estTouche) {
		this.estTouche = estTouche;
	}


	void setNavireTouche(int x, int y){
		//on est sur que x et y sont entre x1 et x2 et y1 et y2

		if (xA == xB){
			//si le bateau est horizontal meme abscisse
			estTouche[y-yA]=true;
			System.out.println("estTouche["+y+"-"+yA+"]="+estTouche[y-yA]);

		} else {
			//si le bateau est vertical different absc => meme ordonne
			estTouche[x-xA]=true;
			System.out.println("\t\testTouche["+x+"-"+xA+"]="+estTouche[x-xA]);
		}
	}

	/**
	 * Check if a position touch the ship
	 * @param x - the x abscisse
	 * @param y - the y ordonnee
	 * @return <code>true</code> if positions is contained by ship, <code>false</code> otherwise.
	 */
	public boolean positionContainsPoint (int x, int y) {
		//si le bateau est horizontal meme abscisse
		if (xA == xB){
			if (x != xA) {
				return false;
			}

			if (yA == y || yB == y) {
				return true;
			}

			if ((yA > y && yB < y) || (yB > y && yA < y)) {
				return true;
			}
		} else {
			//si le bateau est vertical different absc => meme ordonne
			if (y != yA) {
				return false;
			}

			if (xA == x || xB == x) {
				return true;
			}

			if ((xA > x && xB < x) || (xB > x && xA < x)) {
				return true;
			}
		}
		return false;
	}

	//Test si le navire a coule
	Boolean estCoule(){
		Boolean estCoule = true;
		for(Boolean b: estTouche){
			estCoule = (estCoule && b);
		}
		return estCoule;
	}
}
